iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0

在運作之前,可以先試想一下幾個點

  1. 想抓甚麼資料
    1. 如何抓
    2. 何時抓
    3. 資料類型是甚麼
  2. 如何整理、分類
    1. 主要邏輯是甚麼、需要符合邏輯
    2. 明確的分類列別、不重複
  3. 如何記錄
    1. 過程必須記錄方便後續除錯
    2. 收集的資料可以再次使用
  4. 如何運用
    1. 寄給誰,甚麼時候寄信

在問AI時需多留意的內容

  • 一開始可以先由生成式AI主導架構、後面必須要自行修正內容
  • 程式必須依據功能劃分
  • 除錯必須明確簡單
  • 保留前後錯誤紀錄,以方便AI跑偏之後修正

Demo 模組架構與程式關聯圖

拿我目前在使用的架構來說明,下面會分成六大模組協同運作,各司其職且低耦合:

               ┌────────────────┐
               │   config.py    │ (環境變數、時區、排程開關)
               └───────┬────────┘
                       │ 注入設定
                       ▼
               ┌────────────────┐
               │    main.py     │ ◄─── (流程指揮官 / Orchestrator)
               └───────┬────────┘
         並行調度      │     調用分析與狀態存取
     ┌─────────────────┼─────────────────┐
     ▼                 ▼                 ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ fetchers.py  │ │ processor.py │ │   utils.py   │
│ (多來源爬蟲)  │ │ (邏輯分析引擎)│ │ (視覺化/I/O)  │
└──────────────┘ └───────┬──────┘ └───────┬──────┘
                         │ 讀取字典       │ 讀寫狀態
                         ▼                ▼
                 ┌──────────────┐ ┌──────────────┐
                 │ keywords.py  │ │last_seen.json│
                 │ (資安知識庫)  │ │  (狀態快照)  │
                 └──────────────┘ └──────────────┘


📂 個別程式用途與運作原理

1. main.py (流程指揮官 / Pipeline Orchestrator)

  • 用途:系統主入口,統籌五大執行階段生命週期,掌控錯誤處理與效能調度。
  • 運作原理
  • 平行並發抓取 (Concurrent Fetch):使用 concurrent.futures.ThreadPoolExecutor 同時啟動所有啟用的爬蟲任務,打破過去循序等待的瓶頸,執行時間由「總和 $\sum T$」大幅降至「最慢單一任務時間 $\max(T)$」。
  • $O(1)$ 快速比對與去重:將 last_seen.json 載入為記憶體中的雜湊集合(Hash Set),實現毫秒級去重,並於批次內防止跨來源重複情資。
  • 滑動窗口保護 (Sliding Window):對歷史網址維持固定長度保留(最新 3,000 筆),避免長時間運行導致檔案無限制膨脹。

2. processor.py (邏輯分析引擎 / Risk Engine)

  • 用途:情資的「大腦」,執行實體識別、威脅定性與標籤決策矩陣。
  • 運作原理
  • 字詞邊界防誤判 (Regex Word Boundary):透過 \b 精確比對英文縮寫,確保 rce 不會被 salesforce 誤觸發,ad 不會被 broadcast 誤觸發。
  • 階層式決策樹
  1. 計算純技術分數(evaluate_threat_score,T1 ~ T4 最高 10 分)。
  2. 識別目標實體(金融關鍵字、F-ISAC 來源、核心設備/網通品牌)。
  3. 執行矩陣判定:
  • 金融 + 威脅 $\ge 7$關鍵設備 + 重大威脅 $\implies$ 🔥高分警示 [目標]
  • 通用威脅 $\ge 10$ $\implies$ ⚡重大漏洞
  • 特權/總整理 $\implies$ 👑必讀
  • 常規金融情資 $\implies$ 🏦金融焦點
  • 常規設備更新 $\implies$ 🎯關鍵設備

3. keywords.py (資安領域知識庫 / Domain Knowledge Base)

  • 用途:將業務知識與邏輯代碼徹底解耦,定義資產、威脅、特權來源之語彙規則。
  • 運作原理
  • CRITICAL_EQUIPMENT:定義防護邊界(VPN、防火牆、AD 域控、虛擬化主機、NAS)。
  • EQUIPMENT_CRITICAL_THREATS:定義針對設備的毀滅性操作關鍵詞(RCE、身分繞過、逃逸、在野利用)。
  • FINANCE_KEYWORDS:定義金管會、SWIFT、聯徵、ATM、核心帳務等強金融屬性詞。
  • IMPORTANCE_WEIGHTS:劃分 Tier 1(10分)至 Tier 4(2分)的漏洞技術特徵。

4. fetchers.py (異質資料抓取器 / Ingestion Layer)

  • 用途:多源情資收集與格式正規化(Output Schema Normalization)。
  • 運作原理
  • NICS (資通安全研究院):使用 Playwright Headless Chromium 模擬真實使用者翻閱分頁(支援 1~5 頁動態點擊),自動等待 React 元素渲染並過濾無效標題。
  • F-ISAC (金融資安資訊分享中心):整合首頁公告與 STIX 案件查詢庫(自動抓取前 5 頁),取得金融領域第一手攻擊情資。
  • iThome (資安新聞/日報):以 feedparser 快速解析 RSS,作為日常威脅與專家日報的即時情報源。
  • MSRC (微軟):解析 Update Guide RSS,並運用正規表示法提取 CVE ID,自動重組成深度修補指南連結。

5. utils.py (輔助服務與視覺化產出 / Utility & Presentation)

  • 用途:處理狀態持久化、日誌存檔與多樣化郵件報表生成。

  • 運作原理

  • 視覺化郵件引擎:依據 config.py 中的 REPORT_STYLE 支援三種呈現樣式:

  • TABLE(傳統精緻表格,適合桌面端排查)

  • CARDS(現代儀表板卡片,適合重點掃描)

  • TIMELINE(科技串流,適合行動裝置閱讀)

  • 標籤色碼集中管理 (get_tag_style):依情資等級自動套用高對比色票(深鮮紅、亮紅、橘黃、紫色、藍色、石板灰)。


6. config.py (全域組態 / Configuration)

  • 用途:集中管理執行參數、時區設定(UTC+8)、來源開關(ENABLED_SOURCES)與認證密鑰。

第一次參賽,相關內容有誤還請多多提醒,如果寫的不好,也可以留言討論


上一篇
[Day 01]由GitHub Actions開始
下一篇
[Day 03]GitHub Actions - .github/workflows 說明
系列文
從情資收集到資安鑑識:30 天建構自動化威脅情資與鑑識平台3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言